home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / compuserve-file-archive / 08 System Utilities / FLOST.BIN (.txt) < prev    next >
Commodore BASIC  |  2019-04-13  |  9KB  |  293 lines

  1. 0 VS$="LOST FILE 64":REM CIS NAME 'FLOST.BIN'
  2. 1 REM--REWORKING OF 'LOST FILE' FROM B128 TO C64
  3. 2 NT=3:REM ERROR RETRIES
  4. 10 REM--CONVERTED TO BASIC 2.0 FOR UPLOADING TO CIS
  5. 100 PRINTCHR$(142):CS$="U"
  6. 103 PRINT"[147]"TAB(12)""VS$
  7. 105 PRINT"    ******************************"
  8. 110 PRINT"    * AID TO FINDING LOST FILE,  *"
  9. 120 PRINT"    * ESPECIALLY WHEN LOST THRU  *"
  10. 122 PRINT"    * 'SAVE-WITH-REPLACE'        *"
  11. 130 PRINT"    ******************************"
  12. 132 PRINT"    * SEE ALSO 'FLOST.TXT'       *"
  13. 134 PRINT"    * AND 'FLOST.DOC'            *"
  14. 140 PRINT"    ******************************"
  15. 150 PRINT"    INSERT DISK AND PRESS ANY KEY"
  16. 160 GETA$:IFA$=""THEN160
  17. 170 REM------------------------------
  18. 180 REM--SET PROGRAM CONSTANTS-------
  19. 190 REM------------------------------
  20. 200 SP$=" ":NL$=CHR$(0):HX$="0123456789ABCDEF"
  21. 210 XT=35:REM CHANGED FOR 1541
  22. 240 DIM A(255),T(255),S(255)
  23. 245 CR$=""
  24. 250 CH=8:D$="0":REM DEVICE 8 DRIVE 0
  25. 260 OPEN15,CH,15,"I"+D$:GOSUB 650
  26. 270 OPEN 2,CH,2,"#0":GOSUB 650
  27. 280 REM--------------------------------------------------------
  28. 290 REM--MAIN USER INPUT -----------------
  29. 300 REM--------------------------------------------------------
  30. 310 GOSUB40000
  31. 315 GETMN$:IFMN$=""THEN315
  32. 320 IFMN$="D"THENT=18:S=1:GOSUB5000:GOSUB10000:GOTO310
  33. 330 IFMN$="K"THENGOSUB6000:GOTO310
  34. 340 IFMN$="L"THENGOSUB7000:GOTO310
  35. 350 IFMN$="A"THENGOSUB8000:GOTO310
  36. 360 IFMN$="C"ANDCS$="U"THENPRINTCHR$(14);:CS$="L":GOTO315
  37. 370 IFMN$="C"ANDCS$="L"THENPRINTCHR$(142);:CS$="U": GOTO315
  38. 380 IFMN$="H"THENGOSUB9300:GOTO310
  39. 390 IFMN$="X"THENCLOSE1:CLOSE2:PRINT" . . . ENDING PROGRAM.":END
  40. 499 GOTO310
  41. 650 REM--ERROR ROUTINE---------------
  42. 652 INPUT#15,EN,EM$:IF EN=0 THEN RETURN
  43. 653 PRINT"[147]ERROR":END
  44. 660 INPUT#15,EN,EM$,ET,ES:IF EN=0 THEN RT=0:RETURN
  45. 665 RT=RT+1:IF RT<NT THEN RETURN
  46. 670 PRINT"DISK ERROR, CODE:"EN"[146]  "EM$:PRINT" TRACK"ET" SECTOR"ES
  47. 675 PRINT"TRIED"NT"TIMES. PROBABLY SECTOR CANNOT BE READ CORRECTLY."
  48. 677 RETURN
  49. 800 REM------------------------------
  50. 801 REM--DECIMAL TO HEX------
  51. 802 REM------------------------------
  52. 810 REM EXPECTS N TO BE THE DECIMAL NUMBER
  53. 812 REM RETURNS A$ AS TWO BYTE HEX NUMBER
  54. 815 A$=""
  55. 820 A1=INT(N/16):A$=A$+MID$(HX$,A1+1,1)
  56. 830 A2=INT(N-16*A1):A$=A$+MID$(HX$,A2+1,1)
  57. 840 RETURN:REM-------------------------
  58. 5000 REM--------------------------------------------------------
  59. 5001 REM--LOAD TRACK AND SECTOR INTO DISK BUFFER----------------
  60. 5002 REM--------------------------------------------------------
  61. 5005 REM EXPECTS T,S TO BE TRACT AND SECTOR TO READ
  62. 5010 PRINT#15,"U1:2,"D$;T;S:GOSUB660:REM BLOCK-READ
  63. 5020 PRINT#15,"B-P:2,0"
  64. 5030 IFMN$="K"THENFORI=0TO1:GET#2,A$:A(I)=ASC(A$+CHR$(0)):NEXT:GOTO5100
  65. 5040 IFMN$="L"THENFORI=0TO3:GET#2,A$:A(I)=ASC(A$+CHR$(0)):NEXT:GOTO5100
  66. 5050 FOR I=0TO255:GET#2,A$:A(I)=ASC(A$+CHR$(0)):NEXT
  67. 5100 NT=A(0):NS=A(1):FT=A(2):BL=A(30):BH=A(31):SE=A(3):TR=A(4)
  68. 5200 RETURN
  69. 6000 REM--------------------------------------------------------
  70. 6001 REM--LINSKSTER--DISPLAY A CHAIN AND COUNT BLOCKS
  71. 6002 REM--------------------------------------------------------
  72. 6010 PRINT"---COUNT LINKED BLOCKS AND TOTAL-------
  73. 6020 [153]"WHICH TRACK":X$[178]"":[133]X$:[139]X$[178]""[167][142]
  74. 6025 T[178][197](X$)
  75. 6030 [153]"WHICH SECTOR":X$[178]"":[133]X$:[139]X$[178]""[167][142]
  76. 6040 S[178][197](X$)
  77. 6050 [141]9000:[139]EX[167]6020
  78. 6060 [143] IF ILLEGAL RANGE THEN PRINT MSG AND GOTO6000
  79. 6070 NB[178]0:[143] COUNTER
  80. 6080 [141]5000:[153]T"-"S;
  81. 6090 [139]NT[178]0[176]NS[178]255[167]6200:[143] EXIT IF ENDS CHAIN
  82. 6100 NB[178]NB[170]1
  83. 6120 T[178](NT):S[178]NS:[137]6080
  84. 6200 NB[178]NB[170]1:[153]:[153]NB"BLOCKS COUNTED":[142]
  85. 7000 [143]---------------------------------------------------
  86. 7001 [143]--LOADSTER
  87. 7002 [143]---------------------------------------------------
  88. 7005 [153]"-------FIND POSSIBLE FIRST BLOCKS------
  89. 7010 PRINT"ENTER STARTING TRACK":X$="":INPUTX$:IFX$=""THENRETURN
  90. 7020 SK=VAL(X$):IFSK<1THEN7000
  91. 7035 T=SK:GOSUB9000:IFEXTHEN7010
  92. 7040 PRINT"ENTER DECIMAL LOAD ADDRESS":X$="":INPUTX$:IFX$=""THENRETURN
  93. 7050 XX=VAL(X$):REM LOAD ADDRESS
  94. 7055 CC=0
  95. 7060 FORT=SK TO 35:REM CHANGED FOR 1541
  96. 7070 PRINT:PRINT"WORKING TRACK . . ."T
  97. 7080 IFT<18THENFORS=0TO20:GOTO7130
  98. 7090 IFT<25THENFORS=0TO18:GOTO7130
  99. 7100 IFT<31THENFORS=0TO17:GOTO7130
  100. 7110 IFT<36THENFORS=0TO16
  101. 7130 GOSUB5000
  102. 7140 LA=A(2)+256*A(3):IFLA=XXTHENPRINTT"-"S;:CC=CC+1:T(CC)=T:S(CC)=S
  103. 7150 NEXT:NEXT
  104. 7160 PRINT:PRINTCC"POSSIBILITIES"
  105. 7180 PRINT"HIT 'P' TO PRINT LIST TO PRINTER[146]"
  106. 7190 GETA$:IFA$=""THEN7190
  107. 7200 IFA$<>"P"THENRETURN
  108. 7210 OPEN4,4:PRINT#4,"LIST OF POSSIBLES:"
  109. 7220 FORQ=1TOCC:PRINT#4,S(Q):NEXT
  110. 7230 PRINT#4:CLOSE4
  111. 7300 RETURN
  112. 8000 REM---------------------------------------------------
  113. 8001 REM--SCAN BLOCKS--ASCII ONLY
  114. 8002 REM---------------------------------------------------
  115. 8005 PRINT"------------ASCII ONLY SCAN----------
  116. 8010 [153]"ENTER TRACK":XX$[178]"":[133]XX$:[139]XX$[178]""[167][142]
  117. 8020 T[178][197](XX$):[139]T[177]35[167]8000:[143] CHANGE FOR 1541
  118. 8030 [153]"ENTER SECTOR":XX$[178]"":[133]XX$:[139]XX$[178]""[167][142]
  119. 8040 S[178][197](XX$):[141]9000:[139]EX[167]8010
  120. 8050 [141]5000:[143] READ BLOCK
  121. 8060 [153]"TRACK"T"SECTOR"S"READS AS FOLLOWS":[153]"IN ASCII
  122. 8070 FORQ=2TO255
  123. 8080 IFA(Q)<32THENPRINT".";:GOTO8110
  124. 8090 IFA(Q)>90ANDA(Q)<193THENPRINT".";:GOTO8110
  125. 8095 IFA(Q)>218THENPRINT".";:GOTO8110
  126. 8100 PRINTCHR$(A(Q));
  127. 8110 NEXT
  128. 8120 IFA(0)=0ORA(1)=255THENPRINT:PRINT"NO CONTINUATION":GOTO8005
  129. 8130 PRINT:PRINT"WANT NEXT SECTOR (Y/N)?"
  130. 8140 GETA$:IFA$=""THEN8140
  131. 8150 IFA$<>"Y"THEN8000
  132. 8160 T=A(0):S=A(1):GOTO8050
  133. 9000 REM---------------------------------------------------
  134. 9001 REM -- CHECK FOR LEGAL RANGE
  135. 9002 REM---------------------------------------------------
  136. 9005 EX=0
  137. 9010 IF T>XTTHENPRINT"ERROR[146] TRACK TOO HIGH":EX=1:RETURN
  138. 9020 IF T=0THENPRINT"ERROR[146] NO TRACK ZERO!!":EX=1:RETURN
  139. 9030 IFT<18ANDS>20THENPRINT"ILLEGAL SECTOR!!":EX=1:GOTO9100
  140. 9035 IFT<18THEN9100
  141. 9040 IFT<25ANDS>18THENPRINT"ILLEGAL SECTOR!!":EX=1:GOTO9100
  142. 9045 IFT<25THEN9100
  143. 9050 IFT<31ANDS>17THENPRINT"ILLEGAL SECTOR!!":EX=1:GOTO9100
  144. 9055 IFT<31THEN9100
  145. 9060 IFT<36ANDS>16THENPRINT"ILLEGAL SECTOR!!":EX=1:GOTO9100
  146. 9100 RETURN
  147. 9300 REM--HEX AND ASCII SCAN
  148. 9305 PRINT"------------HEX AND ASCII SCAN---------
  149. 9310 [153]"ENTER TRACK":XX$[178]"":[133]XX$:[139]XX$[178]""[167][142]
  150. 9320 T[178][197](XX$)
  151. 9330 [153]"ENTER SECTOR":XX$[178]"":[133]XX$:[139]XX$[178]""[167][142]
  152. 9340 S[178][197](XX$):[141]9000:[139]EX[167]9300
  153. 9350 [141]5000:[153]"LOAD";
  154. 9410 [129]Q[178]0[164]127
  155. 9420 N[178]A(Q):[141]800:[153]A$" ";
  156. 9430 [139](Q[170]1)[173]8[178][181]((Q[170]1)[173]8)[167][153]
  157. 9440 [130]
  158. 9450 [153]"";CR$;
  159. 9460 [129]Q[178]0[164]127
  160. 9470 [139]A(Q)[179]32[167][153]".";:[137]9510
  161. 9480 [139]A(Q)[177]218[167][153]".";:[137]9510
  162. 9490 [139]A(Q)[177]90[175]A(Q)[179]193[167][153]".";:[137]9510
  163. 9500 [153][199](A(Q));
  164. 9510 [139](Q[170]1)[173]8[178][181]((Q[170]1)[173]8)[167][153]:[153]CR$;
  165. 9520 [130]
  166. 9530 [153]:[153]"ANY KEY FOR SECOND HALF (X ABORTS)
  167. 9540 GETA$:IFA$=""THEN9540
  168. 9542 IFA$="X"THEN9830
  169. 9545 PRINT"[147]";
  170. 9550 FORQ=128TO255
  171. 9560 N=A(Q):GOSUB800:PRINTA$" ";
  172. 9570 IF(Q+1)/8=INT((Q+1)/8)THENPRINT
  173. 9580 NEXT
  174. 9590 PRINT"";CR$;
  175. 9600 FORQ=128TO255
  176. 9610 IFA(Q)<32THENPRINT".";:GOTO9650
  177. 9620 IFA(Q)>218THENPRINT".";:GOTO9650
  178. 9630 IF(A(Q))>90AND(A(Q))<193THENPRINT".";:GOTO9650
  179. 9640 PRINTCHR$(A(Q));
  180. 9650 IF(Q+1)/8=INT((Q+1)/8)THENPRINT:PRINTCR$;
  181. 9660 NEXT
  182. 9830 PRINT:PRINT"TRACK"T"SECTOR"S
  183. 9840 IFNT=0ORNS=255THENPRINT"NO CONTINUATION[146]  --  ";:GOTO9310
  184. 9850 PRINT"NEXT TRACK"NT"NEXT SECTOR"NS
  185. 9860 PRINT"WANT TO GO ON? (Y/N)
  186. 9870 [161]A$:[139]A$[178]""[167]9870
  187. 9880 [139]A$[179][177]"Y"[167]9310
  188. 9890 S[178]NS:T[178]NT:[137]9350
  189. 10000 [143]----------------------------------------
  190. 10001 [143]--DISPLAY AND FIX FIRST DIRECTORY ENTRY
  191. 10002 [143]----------------------------------------
  192. 10010 [153]"FIRST DIRECTORY ENTRY IS:"
  193. 10030 CC[178]2:
  194. 10040 [153]"FILE TYPE  ";:N[178]A(CC):[141]800:[153]A$:CC[178]CC[170]1
  195. 10050 [153]" -- STARTS ON TRACK ";:[153]A(CC);:CC[178]CC[170]1
  196. 10060 [153]"--SECTOR ";:[153]A(CC):CC[178]CC[170]1
  197. 10070 [153]"FILENAMEWAIT:  ";
  198. 10080 [129]I[178]CC[164]CC[170]15:N[178]A(I):[153][199](N);:[130]:CC[178]CC[170]16
  199. 10090 [153]" -- "
  200. 10100 [129]I[178]CC[164]CC[170]8:[130]:CC[178]CC[170]9
  201. 10110 [153]"BLOCKS THIS FILE: $ ";:
  202. 10120 N[178]A(CC):[141]800:[153]A$" ";:CC[178]CC[170]1:N[178]A(CC):[141]800:[153]A$:CC[178]CC[170]1
  203. 10130 [153]"   TOTAL BLOCKS--> "A(CC[171]2)[170]256[172]A(CC[171]1)
  204. 10150 [143]PRINT"-----------------------------------------------
  205. 20000 REM INPUT
  206. 20005 PRINT"         <<FIX-MENU[146]>>"
  207. 20020 PRINT"   <C>   TO  CHANGE SOMETHING
  208. 20030 [153]"   <X>   TO  EXIT TO MAIN MENU
  209. 20050 PRINT"   <W>   TO  WRITE DIRECTORY BLOCK[146]
  210. 21000 [161]ZZ$:[139]ZZ$[178]""[167]21000
  211. 21020 [139]ZZ$[178][199](13)[167] [142]
  212. 21030 [139]ZZ$[178]"C"[167][141]22000
  213. 21040 [139]ZZ$[178]"X"[167][142]
  214. 21050 [139]ZZ$[178]"W"[167][141]30000:[153]"VALIDATING DISK":[152]15,"V0"
  215. 21060 [139]ZZ$[178]"W"[167][160]1:[160]2:[160]15:[128]
  216. 21888 [137]21000
  217. 21999 [142]
  218. 22000 [143]--CHANGE SOMETHING
  219. 22030 [153]"TO CHANGE WHICH
  220. 22100 PRINT"F[146]ILE TYPE -- S[146]TARTING TRK,SEC":PRINT"B[146]LOCKS THIS FILE -- EX[146]IT
  221. 22110 [161]RJ$:[139]RJ$[178]""[167]22110
  222. 22120 [139]RJ$[178]"F"[167]23000
  223. 22130 [139]RJ$[178]"S"[167]24000
  224. 22140 [139]RJ$[178]"B"[167]25000
  225. 22150 [139]RJ$[178]"X"[167]10000
  226. 22200 [137]22110
  227. 23000 [143]--CHANGE FILE TYPE
  228. 23010 [153]"ENTER PWAITROGRAM OR SWAITEQUENTIAL FILE
  229. 23020 GETQQ$:IFQQ$=""THEN23020
  230. 23030 IFQQ$<>"P"ANDQQ$<>"S"THENRETURN
  231. 23040 IFQQ$="P"THENX=130
  232. 23050 IFQQ$="S"THENX=129
  233. 23100 A(2)=X
  234. 23110 GOTO10000
  235. 24000 REM CHANGE STARTING TRACK, SECTOR
  236. 24010 PRINT"ENTER STARTING TRACK":QQ$="":INPUTQQ$:IFQQ$=""THENRETURN
  237. 24020 X=VAL(QQ$):IFX>77THENPRINT"ILLEGAL TRACK":GOTO24010
  238. 24030 IFX<1THENPRINT"ILLEGAL TRACK":GOTO24010
  239. 24040 IFFQ>8THENFQ=FQ-8:GOTO24040
  240. 24050 A(3)=X:SG=X
  241. 24060 PRINT"ENTER STARTING SECTOR":QQ$="":INPUTQQ$:IFQQ$=""THENRETURN
  242. 24070 X=VAL(QQ$):IFX>29THENPRINT"ILLEGAL SECTOR":GOTO24060
  243. 24075 IFX<1THENPRINT"ILLEGAL SECTOR":GOTO24060
  244. 24080 IFSG>39ANDX>27THENPRINT"ILLEGAL SECTOR":GOTO24060
  245. 24090 IFSG>53ANDX>25THENPRINT"ILLEGAL SECTOR":GOTO24060
  246. 24100 IFSG>64ANDX>23THENPRINT"ILLEGAL SECTOR":GOTO24060
  247. 24110 IFFQ>8THENFQ=FQ-8:GOTO24110
  248. 24120 A(4)=X
  249. 24130 GOTO10000
  250. 25000 REM -- CHANGE BLOCKS THIS FILE
  251. 25002 PRINT"ENTER NUMBER OF BLOCKS":QQ$="":INPUTQQ$:IFQQ$=""THENRETURN
  252. 25004 X=VAL(QQ$):IFX<1THENPRINT"ILLEGAL NUMBER":GOTO25002
  253. 25010 IFX>65535THENPRINT"ILLEGAL NUMBER":GOTO25002
  254. 25020 IFFFQ>8THENFQ=FQ-8:GOTO25020
  255. 25030 A(31)=INT(X/256)
  256. 25040 A(30)=X-256*A(31)
  257. 25050 GOTO10000
  258. 30000 REM--WRITE BLOCK
  259. 30010 PRINT"[147]THIS IS THE ONLY[146] DISK-WRITING ACTIVITY  IN THIS PROGRAM."
  260. 30020 PRINT"ONCE DONE, IT IS NOT EASILY CHANGED,
  261. 30025 [153]"AND MAY TOTALLY TRASHWAIT THE DISK
  262. 30030 PRINT"IF INCORRECT.
  263. 30040 [153]:[153]"YOU SHOULD BE USING A BACKUPWAIT DISK
  264. 30045 PRINT"RATHER THAN THE ONE WITH THE ORIGINAL
  265. 30050 [153]"LOST FILE."
  266. 30060 [153]"IF THIS IS NOT THE CASE, PLEASE EXIT
  267. 30065 PRINT"THIS PROGRAM NOW[146] AND BACKUP THE DISK
  268. 30070 [153]"IN QUESTION. USE THE BACKUP FOR THIS
  269. 30080 PRINT"OPERATION, EVEN IF IT MEANS MORE WORK!!
  270. 30090 [153]"IF YOU WISH TO CONTINUE, ENTER THE WORD"
  271. 30095 [153]"'CONTINUE' AND <RETURN>.
  272. 30200 QQ$="":INPUTQQ$:IFQQ$<>"CONTINUE"THENPRINT"ABORTING[146]":END
  273. 30210 PRINT"ARE YOU SURE?[146]":QQ$="":INPUTQQ$:IFQQ$<>"Y"THENPRINT"ABORTING[146]":END
  274. 30300 REM------------------------
  275. 30301 REM-DISK WRITING MODULE *******
  276. 30302 REM------------------------
  277. 30400 PRINT#15,"B-P:2,0"
  278. 30410 FORQQ=0TO255:PRINT#2,CHR$(A(QQ));:NEXT
  279. 30420 REM WRITTEN TO DISK BUFFER
  280. 30430 PRINT#15,"B-P:2,0"
  281. 30450 PRINT#15,"U2:2,"D$;T;S:GOSUB660
  282. 30500 RETURN
  283. 40000 REM MAIN MENU
  284. 40010 PRINT"    <<MAIN MENU[146]>>
  285. 40020 [153]"<D> FIX DIRECTORY
  286. 40030 PRINT"<L> FIND POSSIBLE FIRST BLOCKS
  287. 40040 [153]"<A> ASCII SCAN OF BLOCK
  288. 40050 PRINT"<K> CHAIN OF BLOCKS FROM A GIVEN POINT
  289. 40060 [153]"<H> ASCII ANDWAIT HEX SCAN OF BLOCK
  290. 40070 PRINT"<C> CHANGES CASE
  291. 40080 [153]"<X> TO QUIT
  292. 40100 RETURN
  293.